#ifndef INFINITY_SERVICE_KEY_H
#	define INFINITY_SERVICE_KEY_H

namespace infinity {

class ServiceKey
{
public : //! @name Constants
	//! @{
	static const dw::uint32 NAME_MAX_LENGTH = 32;
	//! @}

public : //! @name Construction & Destruction
	//! @{
	ServiceKey();
	explicit ServiceKey(const char* name);
	ServiceKey(const ServiceKey& ref);
	virtual ~ServiceKey();
	//! @}

public : //! @name Helpers
	//! @{
	ServiceKey& operator = (const ServiceKey& rhs);
	//! @}

public : //! @name Friends
	//! @{
	friend bool operator == (const ServiceKey& lhs, const ServiceKey& rhs);
	friend bool operator != (const ServiceKey& lhs, const ServiceKey& rhs);
	friend bool operator >= (const ServiceKey& lhs, const ServiceKey& rhs);
	friend bool operator <= (const ServiceKey& lhs, const ServiceKey& rhs);
	friend bool operator > (const ServiceKey& lhs, const ServiceKey& rhs);
	friend bool operator < (const ServiceKey& lhs, const ServiceKey& rhs);
	//! @}

private : //! @name Data
	//! @{
	char m_name[NAME_MAX_LENGTH];
	//! @}
};

bool operator == (const ServiceKey& lhs, const ServiceKey& rhs);
bool operator != (const ServiceKey& lhs, const ServiceKey& rhs);
bool operator >= (const ServiceKey& lhs, const ServiceKey& rhs);
bool operator <= (const ServiceKey& lhs, const ServiceKey& rhs);
bool operator > (const ServiceKey& lhs, const ServiceKey& rhs);
bool operator < (const ServiceKey& lhs, const ServiceKey& rhs);

} // namespace infinity

#include "servicekey.inl"

#endif // !INFINITY_SERVICE_KEY_H
